在四年的接案經驗中,我使用了各種後端技術組合:Python FastAPI、Kotlin Spring Boot、Go Gin、Node.js Express。每個專案都是獨立開發,導致:
加上去年開了工作室,也該是時候打造屬於工作室的SaaS產品,從而擺脫各種客製化的服務,可以推出一套SaaS產品來尋找機會。
因此決定建立統一的 Kyo-System 後端架構,採用微服務策略,從 OTP 驗證服務開始,逐步建立完整的 SaaS 平台。
後端採用clean architecture與事件驅動設計:
┌─────────────────────────────────────────────────────────────────────┐
│ KYO-SYSTEM BACKEND ARCHITECTURE │
└─────────────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────────────┐
│ API GATEWAY LAYER │
│ TypeScript + Fastify │
│ • REST (External) • ORPC (Internal) │
└─────────────────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ AUTH SERVICE │ │ GYM SERVICE │ │ BOOKING SERVICE │
│ │ │ (Future) │ │ (Future) │
│ • OTP Logic │ │ • Member Mgmt │ │ • Class Booking │
│ • Template Mgmt │ │ • Trainer Info │ │ • Schedule │
│ • Rate Limiting │ │ • Access Control│ │ • Payments │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────┼───────────────┘
▼
┌─────────────────────────────────────────────────────────────────────┐
│ SHARED SERVICES │
├─────────────────┬─────────────────┬─────────────────┬──────────────┤
│ Core Business │ Data Access │ Event System │ External │
│ • @kyong/kyo- │ • Prisma ORM │ • Redis Streams│ • Mitake SMS│
│ core │ • Repositories │ • Pub/Sub │ • Payment │
│ • Validators │ • Migrations │ • Event Store │ • Analytics │
└─────────────────┴─────────────────┴─────────────────┴──────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ DATA & CACHE LAYER │
├─────────────────┬─────────────────┬─────────────────┬──────────────┤
│ RDS PostgreSQL │ ElastiCache │ Redis Streams │ S3 Storage │
│ • OTP Logs │ • Rate Limits │ • Events │ • Files │
│ • Templates │ • OTP Cache │ • Pub/Sub │ • Backups │
│ • Users │ • Sessions │ • Dead Letter │ • Logs │
└─────────────────┴─────────────────┴─────────────────┴──────────────┘
為什麼選擇全 TypeScript 微服務?